package cn.yaoud.salus.oms.alarm.feishu.bot;

import cn.yaoud.salus.common.core.util.SpringContextHolder;
import cn.yaoud.salus.oms.alarm.feishu.bot.msg.richtext.RobotContent;
import lombok.extern.slf4j.Slf4j;

import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 飞书机器人枚举
 *
 * @author 唐彪
 */
@Slf4j
public enum FeiShuRobotEnum {
    /**
     * 监控告警
     */
    ALARM("ALARM"),
    /**
     * 通知
     */
    ALERTER("ALERTER"),
    ;
    private final String robotName;

    FeiShuRobotEnum(String robotName) {
        this.robotName = robotName;
    }

    /**
     * 飞书机器人发送消息
     *
     * @param content 消息通知内容
     */
    public void info(RobotContent content) {
        FeiShuRobot robot = getFeiShuRobot();
        if (Objects.isNull(robot)) {
            log.warn("机器人不存在：{}", robotName);
            return;
        }
        robot.info(content);
    }

    /**
     * 发送卡片消息
     *
     * @param templateId       卡片ID
     * @param templateVersion  版本
     * @param templateVariable 模版变量
     */
    public void cardTemplate(String templateId, String templateVersion, Map<String, Object> templateVariable) {
        FeiShuRobot robot = getFeiShuRobot();
        if (Objects.isNull(robot)) {
            log.warn("机器人不存在：{}", robotName);
            return;
        }
        robot.cardTemplate(templateId, templateVersion, templateVariable);
    }

    /**
     * 告警异常信息
     *
     * @param reportExceptionDto 异常信息
     */
    public void reportException(ReportExceptionDto reportExceptionDto) {
        FeiShuRobot robot = getFeiShuRobot();
        if (Objects.isNull(robot)) {
            log.warn("机器人不存在：{}", robotName);
            return;
        }
        robot.reportException(reportExceptionDto);
    }

    private FeiShuRobot getFeiShuRobot() {
        List<FeiShuRobot> robotList = SpringContextHolder.getBean(FeiShuCustomRobotProperties.class).getRobotList();
        return robotList
                .stream().filter(e -> e.getName().equals(this.robotName))
                .findFirst().orElseThrow();
    }

}
